package com.imooc.coupon.vo;

import com.imooc.coupon.constant.PeriodType;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;

/**
 * 优惠券规则对象定义
 * @Author Administrator
 * @Date 2021/4/17 22:50
 * @Version 1.0
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TemplateRule {
    /** 优惠券过期规则*/
    private Expiration expiration;
    /** 优惠券折扣规则*/
    private Discount discount;
    /** 每个人最多限制领几张*/
    private Integer limiation ;
    /** 使用范围 地域+ 商品类型*/
    private Usage usage;
    /** 优惠券的权重 （同一类的优惠券不用叠加使用） list[] 优惠券的唯一编码*/
    private String weight;
    /**
     * 有效期规则
     */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Expiration{
        /** 有效期规则 ，对应periodType的code字段*/
        private Integer period;
        /** 有效间隔：只对变动有限期有效*/
        private Integer gap;

        /** 优惠券模板的失效日期：两类规则都有效*/
        private Long deadLine;

        boolean validate(){
            //最简单化校验
            return null != PeriodType.of(period) && gap >0 && deadLine > 0;
        }
    }

    /**
     * 折扣
     */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Discount{
        /** 额度： 满减（20），折扣（85），立减（10）*/
        private Integer quota;
        /**  基准：需要满多少才可用*/
        private Integer base;

        boolean validate(){
            return quota > 0 && base > 0;
        }
    }

    /**
     * 适用地点
     */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Usage{
        /** 省份**/
        private String province;
        /** 城市*/
        private String city;
        /** 商品类型*/
        private String goodsType;

        public boolean validate(){
            return StringUtils.isNotEmpty(province)
                    && StringUtils.isNotEmpty(city)
                    && StringUtils.isNotEmpty(goodsType);
        }
    }
}
